初学R
R语言的定位是统计分析、绘图,刚好缺一门这样趁手的语言,当然了Python也是可以的,这里就不对两个语言作比较了:)
安装
根据自己的操作系统到R官网可以找到安装文档对于windows有安装包,对于linux来说直接使用系统的包管理工具进行r的安装就可以啦
运行
在这一点上和python有点相似,R既可以交互式执行也可以执行脚本,在shell当中执行R就可以进入交互式语言环境,注意大写的R
划重点
R的数组的下标是从1而不是从0开始的!这一点需要注意,我猜可能是为了方便各种科研人员使用和理解吧
R的基础数据结构
向量
R因为会涉及到很多的矩阵运算、向量运算、表的连接之类的操作,所以R当中的基础类型包含了向量,并且支持加减乘除等基本操作,在R中使用c()来进行向量的创建,如下:
1 | > v <- c(T,F,NA,TRUE) |
所以你看R简直就是为了线代而生的!也怪不得学统计学以及数学专业的同学大学期间会有R的相关课程啦
因子
因子提供了一种简单而又紧凑的形式来处理分类数据。因子用水平(level)来标示所有可能的取值,如果数据集有取值个数固定的名义变量,因子就会特别有用,下面接着贴代码:
1 | > g <- c("f","m","m","m","f","m","f","m","f","f") |
需要说明的是在R的底层实现中对于因子的存储实际上是数据类型1,2而在使用和展示的时候会进行相应的转化,这里对用户来说是完全透明的,因为int类型不管是运算还是比较其速度都是比其他类型要快的
还是考虑向量转因子这个操作,如果说这个向量当中只有一个维度,但是我想要创建一个两个维度的怎么办?这个时候只要在factor当中传入第二个参数就可以了,如下:
1 | > other.g <- factor(c("m","m","m","m","m")) |
利用因子类型数据,我们可以做的事情之一就是计算每个可能值的发生次数,例如
1 | > table(g) |
table还可以用来获取多个因子的交叉表,假设我们还有一个向量a存储了10个人所属的年龄,那么我们可以得到两个向量的交叉表:
1 | > a <- factor(c('adult','adult','juvenile','juvenile','adult','adult','adult','juvenile','adult','juvenile')) |
我们使用table将两个因子进行运算结果为一个交叉表,这个交叉表可以理解为根据两个向量进行了一次统计,在例子中就是对于1~10的元素,既是adult又是f的有4个,既是adult又是m的有2个,以此类推,所以table(a,g)和table(g,a)的区别仅仅是做了一次rotation,这个需要好好理解一下哈。
相应的R还提供了对于table交叉表结果的运算支持,例如我们想要获得列连表的边际和相对频率,使用margin.table参数第一个为表,第二个参数为想要查询的维度:
1 | > t <- table(a,g) |
同时还能计算相对频率
1 | > prop.table(t,1) |
Tips
在python当中可以使用dir查看当前已经创建的变量&对象,在R当中同样有objects()来查看已经创建的对象,也可以使用ls(),并且使用rm进行删除来释放内存
1 | > objects() |
生成序列
由于向量在R中为基础数据类型,因此其在生成序列的时候也提供了多种方法,如下:
1 | > x <- 1:10 # 表示从1到10的向量 |
相应的还有生成因子序列的函数gl,第一个参数表示因子的个数,第二个参数表示重复次数,可以跟第三个参数跟因子的种类
1 | > gl(3,5) |
同时R还提供了各种随机函数形式为rfunc(n,part1,part2…)例如:
1 | > rnorm(10) #生成10个服从均值为0标准差为1的正态分布的随机数值 |
数据子集
这一节主要讲R对于向量的各种索引操作,十分妖娆,包括普通的逻辑运算以及R特有的使用向量索引向量
1 | > x <- c(0,-3,4,-1,45,90,-5)# 这里我们生成一个向量赋值给x |
给向量复制两种方法的比较vec <- 0和vec <- 0
1 | > x <- 1:5 |
矩阵和数组
在R当中矩阵和数组都是带有维度这个属性的向量
1 | > m <- c(45,23,66,77,33,44,56,12,78,23) |
在矩阵运算中有rbing以及cbind两个用以将两个或两个以上的向量或者矩阵合并到一起的函数
1 | > m1 <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5) |
R还支持给矩阵的行、列命名
1 | > results <- matrix(c(10,30,40,50,43,56,21,30),2,4,byrow = T) |
在R中数组是matrix的拓展,支持两个以上的维度因此需要两个维度以上的索引
1 | > a <- array(1:24,dim = c(4,3,2)) |
列表
R当中的列表是以其他对象为成分的有序集合,她和向量不同他的元素不一定是同一种数据类型、模式、或者是相同长度,列表的成分总是标号并且有一个名称属性
1 | > my.lst <- list(stud.id = 34453,stud.name = "John",stud.marks = c(14.3,12,15,19)) |
dataset
dataset同样是R中一种基本的数据结构,它的结构与二维矩阵类似,然而不同的是,dataset的每列可以有不同的数据类型的数据,在这个意义上,数据框和列表更相似,实际上在R当中dataset是一种特殊的列表。
可以把数据框的每一行行为作为一个观测值(或称为个案),他有一组变量来表述。
1 | > my.dataset <- data.frame(site = c('A','B','A','A','B'),season = c('Winter','Summer','Summer','Spring','Fall'),pH = c(7.4,6.3,8.6,7.2,8.9)) |
可以把attach函数应用到dataset上,attach可以直接访问dataset的列而无需添加相应的数据列名称
1 | > attach(my.dataset) |
对于增加新列的唯一要求就是新列需要和原来的数据拥有同样的行数,我们可以用如下两个函数分别获得dataset的行数和列数
nrow/ncol
在数据挖掘任务重通常很少需要用到上面提到的data.frame来进行手动的输入数据,一般是把来源与文件或者数据库的数据读入dataset,因此建议浏览一下R的数据导入和导出手册
R还可以来编辑一个已存在的dataset、或者创建一个新的dataset
1 | my.dataset <- edit(my.dataset) # 会直接进入vim的编辑模式以文本形式编辑my.dataset很方便!!! |
我们可以通过执行data()来查看当前提供支持的数据结构通过调用data(USArrests)来创建一个叫做USArrests的dataset
自定义函数
1 | > se <- function(x){ |
R的一些理念
R所有东西都是对象,并且支持继承之类的操作,并且其基础类型都会包含plot方法的支持用以对用户透明的绘制图形,这也是R的优点所在,其他的像面向对象啊之类这些都和其他语言是类似的不再赘述。
值得一提的是当退出R的交互模式的时候他会询问是否保存当前工作,如果选择是哪么就会在当前目录生成一个Rplots.pdf,好神奇有没有,这个文件是可以直接打开查看图形的!对于第一次接触R的我来说,讲真,真是太人性化了。
或者在R当中也可以自己手动执行保存操作。
save.image()
load(‘filename’)
棒呆!
转载请注明来源链接 http://just4fun.im/2018/03/31/learning R/ 尊重知识,谢谢:)